/* Copyright (c) 2008, John Cronin
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of the copyright holder nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */

#include "stdlib.h"

int strcmp(const char *s1, const char *s2)
{
	while(*s1 != '\0') {
		if(*s1 < *s2)
			return (int)*s1 - (int)*s2;
		if(*s1 > *s2)
			return (int)*s1 - (int)*s2;
		s1++;
		s2++;
	}
	return 0;
}

int strncmp(const char *s1, const char *s2, size_t n)
{
	int i;

	for(i = 0; i < n; i++) {
		if(s1[i] < s2[i])
			return (int)s1[i] - (int)s2[i];
		if(s1[i] > s2[i])
			return (int)s1[i] - (int)s2[i];
		if(s1[i] == '\0')
			return 0;
	}
	return 0;
}

size_t strlen(const char *s)
{
	size_t len = 0;
	while(*s != '\0') {
		len++;
		s++;
	}
	return len;
}

void *memset(void *s, int c, size_t n)
{
	size_t i;

	for(i = 0; i < n; i++) {
		char *v = (char *)(i + (int)s);
		*v = (char)(c);
	}
	return s;
}
